Note: you may need to restart the kernel to use updated packages.
Requirement already satisfied: yfinance in /home/dix/programs/anaconda3/lib/python3.12/site-packages (0.2.54)
Requirement already satisfied: pandas_datareader in /home/dix/programs/anaconda3/lib/python3.12/site-packages (0.10.0)
Requirement already satisfied: requests in /home/dix/programs/anaconda3/lib/python3.12/site-packages (2.32.3)
Requirement already satisfied: pandas>=1.3.0 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2.2.2)
Requirement already satisfied: numpy>=1.16.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (1.26.4)
Requirement already satisfied: multitasking>=0.0.7 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (0.0.11)
Requirement already satisfied: platformdirs>=2.0.0 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (3.10.0)
Requirement already satisfied: pytz>=2022.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2024.1)
Requirement already satisfied: frozendict>=2.3.4 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2.4.2)
Requirement already satisfied: peewee>=3.16.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (3.17.9)
Requirement already satisfied: beautifulsoup4>=4.11.1 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (4.12.3)
Requirement already satisfied: lxml in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas_datareader) (5.2.1)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (2025.1.31)
Requirement already satisfied: soupsieve>1.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.5)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas>=1.3.0->yfinance) (2.9.0.post0)
Requirement already satisfied: tzdata>=2022.7 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas>=1.3.0->yfinance) (2023.3)
Requirement already satisfied: six>=1.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.0->yfinance) (1.16.0)
Note: you may need to restart the kernel to use updated packages.

Progetto di Metodi Probabilistici e Statistici per Mercati Finanziari

Autore: Dissan Uddin Ahmed

Analisi Finanziaria Dei Mercati Nazionali

I mercati finanziari nazionali rappresentano un pilastro fondamentale dell’economia globale, riflettendo le dinamiche economiche, politiche e sociali di ciascun paese. Questo tipo di analisi aiuta gli investitori a gestire il rischio e capire quali titoli inserire nel proprio portafoglio finanziario. Si cerca di capire come la volatilità sia un parametro da tenere d'occhio quando si investe in borsa.

1) Analisi di mercato

La liquidità di un mercato finanziario si riferisce alla facilità con cui gli investitori possono comprare o vendere titoli finanziari senza causare significative fluttuazioni nei prezzi di mercato. Un mercato altamente liquido è caratterizzato da una maggiore attività di scambio di titoli, un elevato numero di partecipanti, un elevato volume di scambi giornalieri e una stretta differenza tra i prezzi di acquisto (offerta) e i prezzi di vendita (domanda), noti come spread.

La liquidità è un importante fattore da considerare quando si decide di investire in un mercato finanziario.

1.1) Entrata e Uscita mercato azionario

L'entrata e l'uscita dal mercato finanziario sono processi fondamentali per investitori e aziende. Un investitore entra nel mercato acquistando strumenti finanziari come azioni, obbligazioni o derivati, generalmente tramite un intermediario finanziario come una banca o un broker. La decisione di investire si basa su analisi di mercato e strategie di rendimento.

Le aziende possono entrare nel mercato attraverso la quotazione in borsa (IPO), e uscire quando decidono di vendere i propri asset o quando non rispettano i requisiti di mercato.

1.2) Liquidità del Mercato Azionario

La liquidità del mercato azionario si riferisce alla facilità con cui le azioni possono essere acquistate o vendute senza causare fluttuazioni significative nel loro prezzo. Ci sono due aspetti principali della liquidità:

  • Liquidità immediata: La capacità di eseguire ordini di acquisto o vendita a un prezzo vicino al valore di mercato senza influenzare il prezzo stesso.
  • Profondità del mercato: La quantità di ordini di acquisto e vendita a vari livelli di prezzo.

Fattori che influenzano la liquidità includono il volume di scambi, la volatilità e la partecipazione degli investitori istituzionali.

2) Estrazione dei dati

Sono stati scelti i mercati nazionali più importanti e il mercato nazionale italiano, un mercato più piccolo, per verificare alla fine dello studio, se c'è correlazione tra queste borse. I dati sono stati scaricati tramite la libreria Python yfinance, e comprendono la serie storica degli ultimi due anni degli indici delle seguenti borse:

  1. FTSE MIB
  2. Dow Jones
  3. NASDAQ
  4. Nikkei 225
  5. HANG SENG INDEX

In questa sezione si osservano i dataset che sono stati presi in considerazione ed i prezzi di chiusura rettificata delle varie borse.

2.1) FTSE MIB¶

Adjusted Close Close High Low Open Volume
Date
2025-02-18 38554.0 38554.0 38581.0 38418.0 38467.0 686047400
2025-02-19 38348.0 38348.0 38883.0 38320.0 38666.0 924138500
2025-02-20 38249.0 38249.0 38532.0 38179.0 38405.0 471872000
2025-02-21 38421.0 38421.0 38492.0 38285.0 38405.0 463321500
2025-02-24 38473.0 38473.0 38594.0 38155.0 38433.0 613633000
2025-02-25 38715.0 38715.0 38910.0 38303.0 38323.0 532235400
2025-02-26 39225.0 39225.0 39252.0 38798.0 38826.0 693421700
2025-02-27 38623.0 38623.0 39046.0 38380.0 39044.0 548304800
2025-02-28 38655.0 38655.0 38691.0 38324.0 38415.0 637789400
2025-03-03 39069.0 39069.0 39248.0 38404.0 38644.0 526157100

tabella1tabella 1

2.2) London Stock Exchange¶

Adjusted Close Close High Low Open Volume
Date
2025-02-18 11690.0 11690.0 11755.0 11647.916016 11720.0 581454
2025-02-19 11705.0 11705.0 11795.0 11625.000000 11660.0 1219294
2025-02-20 11700.0 11700.0 11755.0 11645.000000 11755.0 665478
2025-02-21 11585.0 11585.0 11710.0 11565.000000 11685.0 1810842
2025-02-24 11300.0 11300.0 11605.0 11250.000000 11560.0 1012104
2025-02-25 11140.0 11140.0 11330.0 11110.000000 11305.0 1235707
2025-02-26 11100.0 11100.0 11240.0 11070.000000 11145.0 1891600
2025-02-27 11775.0 11775.0 11805.0 11190.000000 11390.0 1447385
2025-02-28 11845.0 11845.0 11845.0 11390.960938 11795.0 2581614
2025-03-03 11750.0 11750.0 11915.0 11695.000000 11890.0 1453941

[tabella 2]

2.3) Dow Jones¶

Adjusted Close Close High Low Open Volume
Date
2025-02-18 44556.339844 44556.339844 44602.019531 44319.320312 44583.910156 551790000
2025-02-19 44627.589844 44627.589844 44636.191406 44312.648438 44478.121094 438880000
2025-02-20 44176.648438 44176.648438 44561.109375 43950.160156 44561.109375 448500000
2025-02-21 43428.019531 43428.019531 43959.730469 43349.328125 43820.128906 622550000
2025-02-24 43461.210938 43461.210938 43699.148438 43343.671875 43493.121094 615500000
2025-02-25 43621.160156 43621.160156 43767.738281 43282.980469 43509.738281 641310000
2025-02-26 43433.121094 43433.121094 43866.500000 43318.929688 43635.421875 590270000
2025-02-27 43239.500000 43239.500000 43884.191406 43224.531250 43516.441406 739620000
2025-02-28 43840.910156 43840.910156 43873.550781 43100.871094 43259.839844 782170000
2025-03-03 43191.238281 43191.238281 44033.781250 42919.308594 43900.488281 731560000

[tabella 3]

2.4) NASDAQ¶

Adjusted Close Close High Low Open Volume
Date
2025-02-18 20041.259766 20041.259766 20110.119141 19909.740234 20090.550781 8683170000
2025-02-19 20056.250000 20056.250000 20099.390625 19928.890625 19994.500000 8171530000
2025-02-20 19962.359375 19962.359375 20041.150391 19795.019531 20029.189453 7329270000
2025-02-21 19524.009766 19524.009766 20016.660156 19510.910156 20006.689453 8461020000
2025-02-24 19286.929688 19286.929688 19644.230469 19275.460938 19590.849609 7414760000
2025-02-25 19026.390625 19026.390625 19256.349609 18871.519531 19242.609375 7991440000
2025-02-26 19075.259766 19075.259766 19286.019531 18966.460938 19109.320312 7034450000
2025-02-27 18544.419922 18544.419922 19242.689453 18535.220703 19212.359375 7700290000
2025-02-28 18847.279297 18847.279297 18861.330078 18372.990234 18477.169922 8247520000
2025-03-03 18350.189453 18350.189453 18992.300781 18216.630859 18923.359375 8170140000

[tabella 4]

2.5) Nikkei 225¶

Adjusted Close Close High Low Open Volume
Date
2025-02-17 39174.250000 39174.250000 39238.750000 39021.230469 39094.089844 111300000
2025-02-18 39270.398438 39270.398438 39508.550781 39151.710938 39187.988281 116000000
2025-02-19 39164.609375 39164.609375 39298.050781 38994.699219 39230.621094 124300000
2025-02-20 38678.039062 38678.039062 38967.011719 38468.718750 38942.910156 125200000
2025-02-21 38776.941406 38776.941406 38808.808594 38456.531250 38523.070312 130100000
2025-02-25 38237.789062 38237.789062 38485.949219 38131.789062 38359.671875 132900000
2025-02-26 38142.371094 38142.371094 38175.238281 37742.761719 38143.679688 120800000
2025-02-27 38256.171875 38256.171875 38369.960938 38061.941406 38251.109375 121600000
2025-02-28 37155.500000 37155.500000 37925.281250 36840.121094 37853.480469 191600000
2025-03-03 37785.468750 37785.468750 37827.621094 37372.261719 37617.500000 115800000

[tabella 5]

2.6) HANG SENG INDEX¶

Adjusted Close Close High Low Open Volume
Date
2025-02-18 22976.810547 22976.810547 23141.410156 22608.179688 22664.730469 5222600000
2025-02-19 22944.240234 22944.240234 22975.339844 22649.490234 22777.460938 4080400000
2025-02-20 22576.980469 22576.980469 22849.660156 22436.130859 22716.710938 4200400000
2025-02-21 23477.919922 23477.919922 23477.919922 22901.689453 23090.029297 6167300000
2025-02-24 23341.609375 23341.609375 23688.449219 23221.570312 23472.140625 5264600000
2025-02-25 23034.019531 23034.019531 23248.519531 22716.480469 22716.480469 4449800000
2025-02-26 23787.929688 23787.929688 23973.169922 23238.339844 23238.339844 5138100000
2025-02-27 23718.289062 23718.289062 24076.529297 23441.740234 23783.750000 6257000000
2025-02-28 22941.320312 22941.320312 23616.179688 22798.339844 23616.179688 6578300000
2025-03-03 23006.269531 23006.269531 23405.980469 22861.750000 23135.119141 4338200000

[tabella 6]

Grafico delle chiusure rettificate¶

No description has been provided for this image

[Figura 1]

Grafico dei rendimenti logaritmici%

No description has been provided for this image

[Figura 2]

3) Analisi del Dataset¶

Bisogna ora verificare se il dataset ha i requisiti per poter usare un modello GARCH.

3.1) Test ADF¶

Verifica la presenza di una radice unitaria.

  • Ipotesi nulla: serie temporale non è stazionaria (ha una radice unitaria).

3.2) Test KPSS¶

Verifica la stazionarietà della serie temporale.

  • Ipotesi nulla: serie temporale stazionaria.

3.3) Test di Engle (ARCH Test)¶

Verifica la presenza di eteroschedasticità condizionata.

  • Ipotesi nulla: la serie temporale non presenta eteroschedasticità condizionata (varianza costante nel tempo).

Test ADF Chiusura Rettificata

Qui si fa il test sui Prezzi rettificati ci si aspetta che l'ipotesi nulla sia accettata. I prezzi generalmente non sono stazionari.

Test ADF Chiusura Rettificata

Qui si fa il test sui Prezzi rettificati ci si aspetta che l'ipotesi nulla sia accettata. I prezzi generalmente non sono stazionari.

Statistic PVALUE Null Hypotesis
FTSE MIB -0.106791 0.948758 accepted
London Stock Exchange -0.078668 0.951522 accepted
Dow Jones -0.55681 0.880446 accepted
NASDAQ -0.539786 0.884016 accepted
Nikkei 225 -1.441682 0.562138 accepted
HANG SENG INDEX -2.079428 0.252867 accepted

[Tabella 1]

Test ADF Ritorno logaritmico in percentuale

Nei dati di mercato si aspetta che i rendimenti logaritmici siano stazionari quindi, il test rigetta l'ipotesi nulla che non siano stazionari.

Statistic PVALUE Null Hypotesis
FTSE MIB -28.322738 0.0 rejected
London Stock Exchange -27.978649 0.0 rejected
Dow Jones -26.724298 0.0 rejected
NASDAQ -27.747734 0.0 rejected
Nikkei 225 -28.330204 0.0 rejected
HANG SENG INDEX -26.399908 0.0 rejected

[Tabella 2]

Interpretazione ADF¶

L'interpretazione del test ADF è particolarmente rilevante per le serie storiche finanziarie. Le chiusure rettificate, infatti, tendono a non essere stazionarie, mentre i rendimenti lo sono. Pertanto, per il modello GARCH(1,1), questo primo test suggerisce l'uso dei rendimenti logaritmici.

Test Kpss chiusura Rettificata

Ci si aspetta di rifiutare l'ipotesi nulla del test KPSS, che assume la stazionarietà della serie delle chiusure rettificate dei prezzi.
Questo risultato è coerente con il test ADF, che indica che i prezzi non sono stazionari[Tabella 1].

Statistic PVALUE Null Hypotesis
FTSE MIB 4.100505 0.01 rejected
London Stock Exchange 3.572893 0.01 rejected
Dow Jones 3.714412 0.01 rejected
NASDAQ 3.74084 0.01 rejected
Nikkei 225 3.884299 0.01 rejected
HANG SENG INDEX 0.764956 0.01 rejected

[Tabella 3]

Test Kpss Ritorno logarimico

Ci si aspetta che l'ipotesi nulla venga accettata in quanto in [Tabella 2], viene rifiutato il test ADF

Statistic PVALUE Null Hypotesis
FTSE MIB 0.044266 0.1 accepted
London Stock Exchange 0.079169 0.1 accepted
Dow Jones 0.07054 0.1 accepted
NASDAQ 0.131717 0.1 accepted
Nikkei 225 0.052693 0.1 accepted
HANG SENG INDEX 0.163977 0.1 accepted

[Tabella 4]

Interpretazione KPSS¶

Il test KPSS conferma chiaramente che le chiusure rettificate non sono stazionarie, mentre i ritorni logaritmici lo sono. In altre parole, l'ipotesi nulla del test KPSS, secondo cui la serie sarebbe stazionaria, viene respinta per le chiusure rettificate, evidenziando la presenza di trend o altre dinamiche che alterano la stazionarietà. Al contrario, i ritorni logaritmici, calcolati come la differenza tra i logaritmi dei prezzi, eliminano queste componenti non stazionarie, risultando in una serie più adatta alle analisi statistiche. Questa evidenza, confermata anche dai risultati del test ADF, rende evidente che, per l'applicazione di modelli econometrici come il GARCH(1,1) — che richiedono serie stazionarie per una corretta specificazione e previsione della volatilità — l'utilizzo dei ritorni logaritmici è la scelta più appropriata

Test Engle's Arch Ritorno sulla volatilià

Si decidere di prendere in considerazione i rendimenti logaritmici e si testa la volatilità realizzata su una finestra mobile di 21 giorni

Statistic PVALUE Null Hypotesis
FTSE MIB 706.082102 0.0 rejected
London Stock Exchange 696.839186 0.0 rejected
Dow Jones 699.808358 0.0 rejected
NASDAQ 701.735088 0.0 rejected
Nikkei 225 685.963295 0.0 rejected
HANG SENG INDEX 674.447824 0.0 rejected

[Tabella 5]

Interpretazione Engle's Arch¶

Il test di Engle's ARCH verifica la presenza di effetti ARCH, ovvero variazioni condizionali della varianza nel tempo. In questo caso, il test rigetta l'ipotesi nulla per tutti i mercati analizzati, indicando che la varianza non rimane costante nel tempo. Questo risultato evidenzia una struttura di volatilità dinamica nelle serie, rendendo necessari modelli come il GARCH per una corretta modellizzazione della varianza.

3.5) Plot delle volatilità Realizzate Annualizzate

No description has been provided for this image

[Figura3]

3.6) Test di Shapiro-Wilk¶

Verifica se la serie temporale segue una distribuzione normale.

  • Ipotesi nulla: la serie temporale segue una distribuzione normale.

3.7) Test di D’Agostino-Pearson¶

Verifica se la serie temporale segue una distribuzione normale, considerando asimmetria (skewness) e curtosi (kurtosis).

  • Ipotesi nulla: la serie temporale segue una distribuzione normale.

3.8) Test di Jarque-Bera¶

Verifica se la serie temporale segue una distribuzione normale basandosi su skewness e kurtosis.

  • ipotesi nulla: la serie temporale segue una distribuzione normale

Shapiro Test Sui rendimenti Logaritmici

Statistic PVALUE Null Hypotesis
FTSE MIB 0.964195 0.0 rejected
London Stock Exchange 0.95719 0.0 rejected
Dow Jones 0.975625 0.0 rejected
NASDAQ 0.984566 0.0 rejected
Nikkei 225 0.894408 0.0 rejected
HANG SENG INDEX 0.963362 0.0 rejected

[Tabella 6]

Agostino Pearson Test sui Rendimenti Logaritmici

Statistic PVALUE Null Hypotesis
FTSE MIB 76.345784 0.0 rejected
London Stock Exchange 77.999976 0.0 rejected
Dow Jones 42.820899 0.0 rejected
NASDAQ 30.403838 0.0 rejected
Nikkei 225 280.614075 0.0 rejected
HANG SENG INDEX 73.791289 0.0 rejected

[Tabella 7]

Jarque Bera Test sui Rendimenti Logaritmici

Statistic PVALUE Null Hypotesis
FTSE MIB 371.966568 0.0 rejected
London Stock Exchange 481.664528 0.0 rejected
Dow Jones 130.271534 0.0 rejected
NASDAQ 67.245305 0.0 rejected
Nikkei 225 9664.235738 0.0 rejected
HANG SENG INDEX 351.007831 0.0 rejected

[Tabella 8]

3.6) QQ-Plot

Il QQ-Plot (Quantile-Quantile Plot) è uno strumento grafico utilizzato per confrontare la distribuzione dei dati osservati con una distribuzione teorica di riferimento, ad esempio la distribuzione normale.
Se i punti del QQ-Plot si allineano lungo una retta, ciò indica che la distribuzione dei dati è simile a quella teorica.
In caso contrario, eventuali deviazioni dalla retta possono segnalare asimmetria, code pesanti o altre anomalie nella distribuzione.

No description has been provided for this image

4) Modelli GARCH¶

I modelli GARCH (Generalized Autoregressive Conditional Heteroskedasticity) sono strumenti fondamentali per analizzare e prevedere la volatilità nelle serie temporali finanziarie, come i prezzi azionari, i tassi di cambio o i tassi di interesse. Essi risultano particolarmente utili quando la variabilità dei dati non è costante nel tempo, ma varia in maniera periodica.

4.1) Motivazione per l'uso dei modelli GARCH¶

Nei mercati finanziari la volatilità dei rendimenti tende a variare: durante periodi di crisi essa aumenta, mentre in momenti di stabilità può diminuire. I modelli GARCH sono concepiti per catturare questa dinamica, modellando la volatilità futura come funzione dei valori passati della volatilità stessa e degli errori di previsione antecedenti.

4.2) Struttura del modello GARCH¶

Un modello GARCH si compone di due componenti principali:

  • Autoregressiva (AR): cattura la dipendenza della serie dai valori passati.
  • Condizionale (CH): modella la volatilità condizionale (varianza) in funzione dei dati storici.

Una formulazione standard di un modello GARCH(p, q) è la seguente:

$$r_t = \mu + \epsilon_t$$$$\epsilon_t = \sigma_t e_t$$$$\sigma^2_t = \omega + \alpha \epsilon^2_{t-1} + \beta \sigma^2_{t-1}$$

dove:

  • $r_t$ è il rendimento al tempo $t$;
  • $\mu$ rappresenta la media della serie;
  • $\epsilon_t$ è l'errore al tempo $t$, influenzato dalla volatilità condizionale $\sigma^2_t$;
  • $\omega$, $\alpha$ e $\beta$ sono parametri da stimare.
  • $\sigma^2_t$ La volatilità condizionale è espressa come una combinazione lineare degli errori passati e della volatilità del periodo precedente.

4.3) Scelta del modello f-GARCH (Sottmodello GARCH(1,1))¶

Dall'analisi dei dati si osserva che la volatilità aumenta in misura maggiore a seguito di shock negativi, evidenziando un effetto asimmetrico. Per modellare questa caratteristica, è stata scelta una variante flessibile del GARCH, nota come f-GARCH.

Una possibile specificazione del modello f-GARCH è la seguente:

  • $r_t = \mu + \epsilon_t$
  • $\epsilon_t = \sigma_t z_t$
  • $\sigma^2_t = \omega + \alpha\, f(\epsilon_{t-1}) + \beta \sigma^2_{t-1}$

dove la funzione $f(\cdot)$ è studiata per catturare l'impatto asimmetrico degli shock. Ad esempio, una specificazione comune è:

$f(\epsilon_{t-1}) = \left( |\epsilon_{t-1}| - \gamma\, \epsilon_{t-1} \right)^2$

In questa formulazione, un valore positivo di $\gamma$ implica che gli shock negativi influenzano la volatilità in maniera più marcata rispetto agli shock positivi.

Per la fase di stima, il 90% del dataset è stato utilizzato per il fitting del modello, mentre la scelta della distribuzione degli errori è stata effettuata mediante il criterio della massima verosimiglianza, al fine di individuare la distribuzione che meglio rappresenta le caratteristiche empiriche dei dati.

4.4) Analisi Residui¶

Qui vengono effettuati i test che sono stati fatti per verificare la stazionarietà, fatti in precedenza, confrontando i risultati di Tabella 2 e Tabella 4

Test ADF Sui residui del modello GARHC

Nei dati di mercato si aspetta che i residui siano stazionari quindi, il test rigetta l'ipotesi nulla che non siano stazionari.
Come in [Tabella 2]

Statistic PVALUE Null Hypotesis
FTSE MIB -26.563463 0.0 rejected
London Stock Exchange -26.589805 0.0 rejected
Dow Jones -25.72439 0.0 rejected
NASDAQ -26.431376 0.0 rejected
Nikkei 225 -26.076401 0.0 rejected
HANG SENG INDEX -25.419835 0.0 rejected

[Tabella 9]

Test Kpss Residui modello GARCH

Ci si aspetta che l'ipotesi nulla venga accettata in quanto ci si aspetta che i residui siano stazionari.
Come in [Tabella 4].

Statistic PVALUE Null Hypotesis
FTSE MIB 0.114389 0.1 accepted
London Stock Exchange 0.054204 0.1 accepted
Dow Jones 0.129198 0.1 accepted
NASDAQ 0.209622 0.1 accepted
Nikkei 225 0.028945 0.1 accepted
HANG SENG INDEX 0.097537 0.1 accepted

Test di Ljung-Box (Autocorrelazione dei residui)¶

Controlla se esiste autocorrelazione nei residui di una serie temporale.

  • Ipotesi nulla: I residui non sono autocorrelati (seguono un rumore bianco).
    La serie temporale non presenta eteroschedasticità condizionata (varianza costante nel tempo).
  • Ipotesi alternativa: I residui mostrano autocorrelazione, suggerendo che il modello non ha catturato tutta la dipendenza temporale.

Test Ljung-Box Residui modello GARCH

Ci si aspetta che l'ipotesi nulla venga accettata, indicando che i residui non presentano autocorrelazione e seguono un rumore bianco.

Statistic PVALUE Null Hypotesis
FTSE MIB 16.510189 0.740336 accepted
London Stock Exchange 18.053558 0.645612 accepted
Dow Jones 27.976185 0.140828 accepted
NASDAQ 36.137602 0.0211 rejected
Nikkei 225 14.861735 0.829825 accepted
HANG SENG INDEX 30.677706 0.079192 accepted

[Tabella 11]

Grafico Residui¶

No description has been provided for this image

Generazione di Traiettorie Simulate¶

Questa sezione si occupa della simulazione di traiettorie di rendimento basate sul modello GARCH(1,1). Vengono generate più simulazioni per ciascun indice finanziario, partendo dai parametri stimati del modello. L'obiettivo è ottenere una rappresentazione delle possibili evoluzioni future della volatilità e dei rendimenti.

Le traiettorie simulate possono essere utilizzate successivamente per il plotting, consentendo un'analisi visiva della dispersione dei rendimenti e della loro volatilità attesa nel tempo. Inoltre, viene calcolata la traiettoria mediana, utile per avere un riferimento centrale tra le diverse simulazioni.

Confronto della Volatilità¶

Questa funzione si occupa di generare dei grafici comparativi per visualizzare l'andamento nel tempo dei rendimenti logaritmici e della volatilità condizionale stimata per ciascun indice finanziario. Utilizzando i dati presenti nell'oggetto GarchUtil, la funzione crea una serie di sottotrame (una per ogni indice) in cui viene tracciata una linea per i rendimenti e un'altra per la volatilità derivata dal modello fGARCH (GARCH(1,1)). Il grafico risultante, completo di titoli, etichette e legende, consente di analizzare e confrontare visivamente l'evoluzione dei due indicatori nel tempo, evidenziando eventuali dinamiche e differenze tra i vari mercati.

Valutazione degli Intervalli di Confidenza sui Rendimenti Futuri¶

In questo contesto si mira a verificare l'accuratezza delle previsioni della volatilità, utilizzando intervalli di confidenza per i rendimenti futuri del test set. Per ogni livello di confidenza (ad esempio, 80%, 90%, 95%), vengono definiti dei limiti superiori e inferiori attorno alla stima della volatilità. Questi limiti indicano l'intervallo entro cui ci si aspetta che i rendimenti futuri ricadano con la probabilità specificata.

L'analisi consiste nel controllare quanti dei rendimenti osservati nel test set rientrano in ciascuno di questi intervalli di confidenza. Il risultato viene poi sintetizzato in una tabella, che mostra la percentuale di punti "catturati" dai vari intervalli. Questo approccio permette di valutare la capacità predittiva del modello in termini di accuratezza degli intervalli e di identificare eventuali discrepanze tra le previsioni e i dati reali.

No description has been provided for this image
80% 85% 90% 95%
FTSE MIB 89.47% 93.42% 96.05% 98.68%
London Stock Exchange 84.21% 86.84% 93.42% 94.74%
Dow Jones 82.67% 89.33% 92.00% 94.67%
NASDAQ 85.33% 89.33% 92.00% 96.00%
Nikkei 225 90.54% 91.89% 97.30% 97.30%
HANG SENG INDEX 86.49% 89.19% 91.89% 95.95%

4) Metriche di Accuratezza¶

Per valutare il modello usato, consideriamo le seguenti metriche di accuratezza:

  • Scale-Dependent Metrics

    • $\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| $

    Indica l'errore medio assoluto tra le previsioni e i valori reali. Un valore basso è preferibile, poiché indica una buona adattabilità del modello ai dati.

    • $\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $

    Misura la deviazione quadratica media tra le previsioni e i valori reali. Si eleva al quadrato gli errori, enfatizzando gli errori più grandi. È sensibile agli outlier. Un MSE più basso è migliore, indicando una migliore precisione.

  • Scale Free Metrics

    • $\text{MASE} = \frac{MAE}{\frac{1}{m-1} \sum_{j=2}^{m} |y_j - y_{j-1}|} $

    Valuta la capacità predittiva del modello rispetto a un modello naïve dove le previsioni sono basate sul valore precedente. Un valore inferiore a 1 indica che il modello è migliore del modello naïve.

    • $\text{RMSSE} = \sqrt{\frac{MSE}{\frac{1}{m-1} \sum_{j=2}^{m} (y_j - y_{j-1})^2}} $

    È una versione scalata di MSE, che considera anche il confronto con un modello di benchmark (ad esempio, il modello naïve). Un valore inferiore a 1 indica una migliore performance rispetto al modello di riferimento.

MAE MSE MASE RMSSE
FTSE MIB 0.437246 0.229476 16.127082 10.870965
London Stock Exchange 0.270665 0.089369 7.126525 3.544068
Dow Jones 0.270987 0.097056 9.095685 4.863996
NASDAQ 0.369655 0.161757 8.039922 4.883401
Nikkei 225 0.517749 0.283473 18.136015 12.493479
HANG SENG INDEX 1.513829 2.324972 30.231048 20.179274

GARCH MULTIDIMENSIONALE¶

I modelli GARCH multidimensionali rappresentano un'estensione dei modelli univariati, progettati per catturare non solo la volatilità condizionata di una singola serie, ma anche le interdipendenze tra più serie temporali. Questi modelli sono particolarmente utili in ambito finanziario per analizzare la dinamica congiunta di asset, consentendo di modellare la matrice di covarianza condizionata e, quindi, di prevedere in maniera dinamica sia le varianze individuali sia le correlazioni tra di esse.

Motivazioni e Obiettivi¶

  • Dinamica Congiunta: I modelli multidimensionali permettono di descrivere come la volatilità di ciascun asset interagisca con quella degli altri, offrendo una visione più completa dei rischi condivisi.
  • Gestione del Rischio e Ottimizzazione del Portafoglio: La stima dinamica della matrice di covarianza è fondamentale per valutare la correlazione tra asset e per costruire portafogli efficienti.
  • Garantire la Positività: Questi modelli assicurano che la matrice di covarianza condizionata sia definita positiva, condizione essenziale per la coerenza delle previsioni di rischio.

DCC-GARCH¶

Formulazione del DCC-GARCH¶

Il modello DCC-GARCH si articola in due fasi: la modellizzazione univariata della volatilità per ogni serie e la dinamica condizionale delle correlazioni tra le serie.

1. Modellizzazione Univariata¶

Per ogni serie (i), si assume un modello GARCH univariato, ad esempio di tipo GARCH(1,1):

$r_{i,t} = \mu_i + \epsilon_{i,t}, \quad \epsilon_{i,t} = \sqrt{h_{i,t}} \, z_{i,t}$

$h_{i,t} = \omega_i + \alpha_i \, \epsilon_{i,t-1}^2 + \beta_i \, h_{i,t-1}$

dove:

  • $r_{i,t}$ è il rendimento della serie $i$ al tempo $t$;
  • $h_{i,t}$ è la varianza condizionata della serie $i$;
  • $z_{i,t}$ sono gli errori standardizzati, assunti generalmente i.i.d. con distribuzione adatta (es. normale o t-Student).

I residui standardizzati sono ottenuti come:

$z_{i,t} = \frac{\epsilon_{i,t}}{\sqrt{h_{i,t}}}$

2. Dinamica Condizionale delle Correlazioni¶

Una volta ottenuti i residui standardizzati per tutte le serie, si definisce il vettore $z_t = (z_{1,t}, z_{2,t}, \dots, z_{N,t})'$ e si costruisce la matrice di correlazione non normalizzata (Q_t) secondo il seguente processo dinamico:

$Q_t = (1 - a - b) \, \bar{Q} + a \, z_{t-1} z_{t-1}' + b \, Q_{t-1}$

dove:

  • (a) e (b) sono parametri che controllano l'impatto degli shock passati e la persistenza della dinamica delle correlazioni;
  • $\bar{Q}$ è la matrice di covarianza invariante (o incondizionata) dei residui standardizzati.

Infine, la matrice di correlazione condizionale $R_t$ viene ottenuta normalizzando $Q_t$:

$R_t = \text{diag}(Q_t)^{-1/2} \, Q_t \, \text{diag}(Q_t)^{-1/2}$

Questa normalizzazione assicura che la diagonale di $R_t$ sia composta da 1, rendendo $R_t$ una vera matrice di correlazione condizionata.

No description has been provided for this image

Interpretazione della Heatmap della Matrice di Correlazione¶

La heatmap della matrice di correlazione offre una rappresentazione visiva immediata delle relazioni tra le variabili (o asset). Ecco come interpretarla:

  • Colori e Intensità:
    I colori rappresentano il grado e la direzione della correlazione. Solitamente, tonalità più calde (ad es. rosso) indicano correlazioni positive elevate, mentre tonalità più fredde (ad es. blu) evidenziano correlazioni negative. Le tonalità intermedie indicano correlazioni deboli o prossime allo zero.

  • Simmetria della Matrice:
    La matrice è simmetrica, in quanto la correlazione tra la variabile A e B è la stessa di quella tra B e A. La diagonale principale mostra sempre il valore 1, rappresentando la correlazione di ogni variabile con se stessa.

  • Rilevamento di Pattern e Cluster:
    Zone con colori simili suggeriscono che alcuni asset si comportano in maniera molto affine, evidenziando possibili raggruppamenti o cluster di variabili correlate. Queste informazioni possono essere utili per la diversificazione del portafoglio, poiché asset con bassa correlazione tendono a ridurre il rischio complessivo.

  • Applicazioni Pratiche:
    La heatmap aiuta a individuare rapidamente le relazioni più forti e quelle deboli, facilitando la gestione del rischio e l'ottimizzazione del portafoglio. Essa può evidenziare correlazioni sistemiche e fornire spunti su come strutturare strategie di copertura.

Numero di matrici previste: 20
Matrice di covarianza sommata:
 [[21.17914672  0.56443504  5.70662837 10.45492047  4.6366441   8.76354384]
 [ 0.56443504 30.90062994  3.33438673  3.13530296  3.90248137 -1.93375715]
 [ 5.70662837  3.33438673 13.89567542 17.61675     2.77778082 -0.84271912]
 [10.45492047  3.13530296 17.61675    46.67327759  5.33488991  3.73226635]
 [ 4.6366441   3.90248137  2.77778082  5.33488991 35.55900339 11.0280691 ]
 [ 8.76354384 -1.93375715 -0.84271912  3.73226635 11.0280691  73.03672562]]
(array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5]),
 [Text(0.5, 0, 'FTSE MIB'),
  Text(1.5, 0, 'London Stock Exchange'),
  Text(2.5, 0, 'Dow Jones'),
  Text(3.5, 0, 'NASDAQ'),
  Text(4.5, 0, 'Nikkei 225'),
  Text(5.5, 0, 'HANG SENG INDEX')])
No description has been provided for this image
usage: ipython [-h] [--debug] [--show-config] [--show-config-json] [--quiet]
               [--init] [--autoindent] [--no-autoindent] [--automagic]
               [--no-automagic] [--pdb] [--no-pdb] [--pprint] [--no-pprint]
               [--color-info] [--no-color-info] [--ignore-cwd]
               [--no-ignore-cwd] [--nosep] [--autoedit-syntax]
               [--no-autoedit-syntax] [--simple-prompt] [--no-simple-prompt]
               [--banner] [--no-banner] [--confirm-exit] [--no-confirm-exit]
               [--term-title] [--no-term-title] [--classic] [--quick] [-i]
               [--log-level TerminalIPythonApp.log_level]
               [--profile-dir ProfileDir.location]
               [--profile TerminalIPythonApp.profile]
               [--ipython-dir TerminalIPythonApp.ipython_dir]
               [--config TerminalIPythonApp.extra_config_file]
               [--autocall TerminalInteractiveShell.autocall]
               [--colors TerminalInteractiveShell.colors]
               [--logfile TerminalInteractiveShell.logfile]
               [--logappend TerminalInteractiveShell.logappend]
               [-c TerminalIPythonApp.code_to_run]
               [-m TerminalIPythonApp.module_to_run]
               [--ext TerminalIPythonApp.extra_extensions]
               [--gui TerminalIPythonApp.gui]
               [--pylab [TerminalIPythonApp.pylab]]
               [--matplotlib [TerminalIPythonApp.matplotlib]]
               [--cache-size TerminalInteractiveShell.cache_size]
               [extra_args ...]
ipython: error: unrecognized arguments: --no-input project.ipynb
[NbConvertApp] Converting notebook project.ipynb to markdown
[NbConvertApp] Support files will be in project_files\
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Making directory project_files
[NbConvertApp] Writing 59522 bytes to project.md
[NbConvertApp] Converting notebook project.ipynb to html
[NbConvertApp] Writing 9275904 bytes to project.html
[NbConvertApp] Converting notebook project.ipynb to pdf
[NbConvertApp] Support files will be in project_files\
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Writing 62323 bytes to notebook.tex
[NbConvertApp] Building PDF
Traceback (most recent call last):
  File "F:\programmi\anaconda\Scripts\jupyter-nbconvert-script.py", line 10, in <module>
    sys.exit(main())
             ^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\jupyter_core\application.py", line 277, in launch_instance
    return super().launch_instance(argv=argv, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\traitlets\config\application.py", line 992, in launch_instance
    app.start()
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 423, in start
    self.convert_notebooks()
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 597, in convert_notebooks
    self.convert_single_notebook(notebook_filename)
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 560, in convert_single_notebook
    output, resources = self.export_single_notebook(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 488, in export_single_notebook
    output, resources = self.exporter.from_filename(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\exporter.py", line 189, in from_filename
    return self.from_file(f, resources=resources, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\exporter.py", line 206, in from_file
    return self.from_notebook_node(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 194, in from_notebook_node
    self.run_latex(tex_file)
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 164, in run_latex
    return self.run_command(
           ^^^^^^^^^^^^^^^^^
  File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 111, in run_command
    raise OSError(
OSError: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.